using System;
using System.ComponentModel.DataAnnotations;

namespace Sheep_Breeding.Write.Api.DTOs
{
    /// <summary>
    /// 羊只死亡记录DTO
    /// </summary>
    public class SheepDeathDto
    {
        public long Id { get; set; } // 主键
        public DateTime DeathDate { get; set; } // 死亡日期
        public string SheepEarNumber { get; set; } // 羊只耳号
        public string DeathReason { get; set; } // 死亡原因
        public string Breed { get; set; } // 品种
        public string Gender { get; set; } // 性别
        public string ReproductiveStatus { get; set; } // 繁殖状态
        public int Buildings { get; set; } // 栋舍
        public DateTime BirthDate { get; set; } // 出生日期
        public string? CreatorId { get; set; } // 创建人
        public DateTime? CreateTime { get; set; } // 创建时间
        public string? ModifierId { get; set; } = string.Empty; // 修改人
        public DateTime? ModifyTime { get; set; } = DateTime.MinValue; // 修改时间
        public string? AuditorId { get; set; } = string.Empty; // 审核人
        public DateTime? AuditTime { get; set; } = DateTime.MinValue; // 审核时间
        public string OrderNumber { get; set; } // 单据号
        public string Remark { get; set; } // 备注
    }

    /// <summary>
    /// 添加羊只死亡记录DTO
    /// </summary>
    public class AddSheepDeathDto
    {
        [Required]
        public DateTime DeathDate { get; set; } // 死亡日期
        [Required]
        [StringLength(50)]
        public string SheepEarNumber { get; set; } // 羊只耳号
        [StringLength(200)]
        public string DeathReason { get; set; } // 死亡原因
        [StringLength(50)]
        public string Breed { get; set; } // 品种
        [StringLength(10)]
        public string Gender { get; set; } // 性别
        [StringLength(20)]
        public string ReproductiveStatus { get; set; } // 繁殖状态
        public int Buildings { get; set; } // 栋舍
        public DateTime BirthDate { get; set; } // 出生日期
        public string? CreatorId { get; set; } // 创建人
        public string OrderNumber { get; set; } // 单据号
        [StringLength(500)]
        public string Remark { get; set; } // 备注
    }

    /// <summary>
    /// 修改羊只死亡记录DTO
    /// </summary>
    public class UpdateSheepDeathDto
    {
        [Required]
        public long Id { get; set; } // 主键
        [Required]
        public DateTime DeathDate { get; set; } // 死亡日期
        [Required]
        [StringLength(50)]
        public string SheepEarNumber { get; set; } // 羊只耳号
        [StringLength(200)]
        public string DeathReason { get; set; } // 死亡原因
        [StringLength(50)]
        public string Breed { get; set; } // 品种
        [StringLength(10)]
        public string Gender { get; set; } // 性别
        [StringLength(20)]
        public string ReproductiveStatus { get; set; } // 繁殖状态
        public int Buildings { get; set; } // 栋舍
        public DateTime BirthDate { get; set; } // 出生日期
        public string? ModifierId { get; set; } // 修改人
        public DateTime? ModifyTime { get; set; } // 修改时间
        public string OrderNumber { get; set; } // 单据号
        [StringLength(500)]
        public string Remark { get; set; } // 备注
    }

    /// <summary>
    /// 带栋舍名称的羊只死亡记录DTO（用于查询所有时返回）
    /// </summary>
    public class SheepDeathWithHouseDto
    {
        public long Id { get; set; } // 主键
        public DateTime DeathDate { get; set; } // 死亡日期
        public string SheepEarNumber { get; set; } // 羊只耳号
        public string DeathReason { get; set; } // 死亡原因
        public string Breed { get; set; } // 品种
        public string Gender { get; set; } // 性别
        public string ReproductiveStatus { get; set; } // 繁殖状态
        public int? Buildings { get; set; } // 栋舍Id
        public string HousetypeName { get; set; } // 栋舍名称
        public DateTime BirthDate { get; set; } // 出生日期
        public string? CreatorId { get; set; } // 创建人
        public DateTime? CreateTime { get; set; } // 创建时间
        public string? ModifierId { get; set; } = string.Empty; // 修改人
        public DateTime? ModifyTime { get; set; } = DateTime.MinValue; // 修改时间
        public string? AuditorId { get; set; } = string.Empty; // 审核人
        public DateTime? AuditTime { get; set; } = DateTime.MinValue; // 审核时间
        public string OrderNumber { get; set; } // 单据号
        public string Remark { get; set; } // 备注
    }
} 